﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace SVC_DAL
{
    public class ClienteDAL
    {
        Dados objD = null;

        public ClienteDAL()
        {
        
        }

        //inserção
        public void inserir(String tipo_pessoa, String nome, int idade, DateTime nascimento, String rg,
            String cpf, String logradouro, String numero, String complemento, String bairro, int cidade,
            String razao, String cnpj, String ie, DateTime fundacao,String cli_telefone, String cli_celular,
            String cli_calJuros, Double cli_limiteCredito, Double cli_limiteMensal)
        {
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                if (tipo_pessoa == "Pessoa Física") {
                    cmd.CommandText = "INSERT INTO Cliente" +
                        "(cli_nome,cli_idade,cli_data_nascimento, " +
                        " cli_rg,cli_cpf,cli_logradouro,cli_numero, " +
                        " cli_complemento,cli_bairro,cid_codigo, cli_tipo_pessoa,cli_telefone,cli_celular,"+
                        "cli_calJuros,cli_limiteCredito, cli_limiteMensal)" +
                        " VALUES (@nome,@idade, @nascimento, @rg, @cpf, @logradouro, @numero," +
                        " @complemento, @bairro, @cidade, @tipo_pessoa,@cli_telefone,@cli_celular,"+
                        "@cli_calJuros,@cli_limiteCredito, @cli_limiteMensal)";
                    cmd.Parameters.Add(new SqlParameter("@nome", SqlDbType.VarChar)).Value = nome;
                    cmd.Parameters.Add(new SqlParameter("@idade", SqlDbType.Int)).Value = idade;
                    cmd.Parameters.Add(new SqlParameter("@nascimento", SqlDbType.Date)).Value = nascimento;
                    cmd.Parameters.Add(new SqlParameter("@rg", SqlDbType.VarChar)).Value = rg;
                    cmd.Parameters.Add(new SqlParameter("@cpf", SqlDbType.VarChar)).Value = cpf;
                    cmd.Parameters.Add(new SqlParameter("@logradouro", SqlDbType.VarChar)).Value = logradouro;
                    cmd.Parameters.Add(new SqlParameter("@numero", SqlDbType.VarChar)).Value = numero;
                    cmd.Parameters.Add(new SqlParameter("@complemento", SqlDbType.VarChar)).Value = complemento;
                    cmd.Parameters.Add(new SqlParameter("@bairro", SqlDbType.VarChar)).Value = bairro;
                    cmd.Parameters.Add(new SqlParameter("@cidade", SqlDbType.Int)).Value = cidade;
                    cmd.Parameters.Add(new SqlParameter("@tipo_pessoa", SqlDbType.VarChar)).Value = tipo_pessoa;
                    cmd.Parameters.Add(new SqlParameter("@cli_telefone", SqlDbType.VarChar)).Value = cli_telefone;
                    cmd.Parameters.Add(new SqlParameter("@cli_celular", SqlDbType.VarChar)).Value = cli_celular;
                    cmd.Parameters.Add(new SqlParameter("@cli_calJuros", SqlDbType.VarChar)).Value = cli_calJuros;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteCredito", SqlDbType.Float)).Value = cli_limiteCredito;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteMensal", SqlDbType.Float)).Value = cli_limiteMensal;
                }
                else if (tipo_pessoa == "Pessoa Jurídica") {
                    cmd.CommandText = "INSERT INTO Cliente" + 
                        " (cli_razao_social, cli_data_fundacao, " +
                        " cli_ie, cli_cnpj, cli_logradouro, cli_numero, " +
                        " cli_complemento,cli_bairro,cid_codigo, cli_tipo_pessoa,"+
                        " cli_telefone, cli_celular,cli_calJuros,cli_limiteCredito,cli_limiteMensal)" +
                        " VALUES (@razao, @fundacao, @ie, @cnpj, @logradouro, @numero," +
                        " @complemento, @bairro, @cidade, @tipo_pessoa,@cli_telefone,@cli_celular,"+
                        "@cli_calJuros,@cli_limiteCredito,@cli_limiteMensal)";
                    cmd.Parameters.Add(new SqlParameter("@razao", SqlDbType.VarChar)).Value = razao;
                    cmd.Parameters.Add(new SqlParameter("@fundacao", SqlDbType.Date)).Value = fundacao;
                    cmd.Parameters.Add(new SqlParameter("@ie", SqlDbType.VarChar)).Value = ie;
                    cmd.Parameters.Add(new SqlParameter("@cnpj", SqlDbType.VarChar)).Value = cnpj;
                    cmd.Parameters.Add(new SqlParameter("@logradouro", SqlDbType.VarChar)).Value = logradouro;
                    cmd.Parameters.Add(new SqlParameter("@numero", SqlDbType.VarChar)).Value = numero;
                    cmd.Parameters.Add(new SqlParameter("@complemento", SqlDbType.VarChar)).Value = complemento;
                    cmd.Parameters.Add(new SqlParameter("@bairro", SqlDbType.VarChar)).Value = bairro;
                    cmd.Parameters.Add(new SqlParameter("@cidade", SqlDbType.Int)).Value = cidade;
                    cmd.Parameters.Add(new SqlParameter("@tipo_pessoa", SqlDbType.VarChar)).Value = tipo_pessoa;
                    cmd.Parameters.Add(new SqlParameter("@cli_telefone", SqlDbType.VarChar)).Value = cli_telefone;
                    cmd.Parameters.Add(new SqlParameter("@cli_celular", SqlDbType.VarChar)).Value = cli_celular;
                    cmd.Parameters.Add(new SqlParameter("@cli_calJuros", SqlDbType.VarChar)).Value = cli_calJuros;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteCredito", SqlDbType.Float)).Value = cli_limiteCredito;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteMensal", SqlDbType.Float)).Value = cli_limiteMensal;
                }  
                objD.executacomando(cmd);
                cmd = null;
                objD = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //alterar
        public void alterar(int codigo, String tipo_pessoa, String nome, int idade, DateTime nascimento, String rg,
            String cpf, String logradouro, String numero, String complemento, String bairro, int cidade,
            String razao, String cnpj, String ie, DateTime fundacao,String cli_telefone, String cli_celular,
            String cli_calJuros, Double cli_limiteCredito, Double cli_limiteMensal)
        {
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                if (tipo_pessoa == "Pessoa Física")
                {
                    cmd.CommandText = "UPDATE Cliente" +
                        " SET cli_nome = @nome, cli_idade = @idade, cli_data_nascimento = @nascimento," +
                        " cli_rg = @rg, cli_cpf = @cpf, cli_logradouro = @logradouro, cli_numero = @numero,"+
                        " cli_complemento = @complemento, cli_bairro = @bairro, cid_codigo = @cidade, cli_tipo_pessoa = @tipo_pessoa,"+
                        " cli_telefone=@cli_telefone, cli_celular = @cli_celular, cli_calJuros=@cli_calJuros, cli_limiteCredito=@cli_limiteCredito,cli_limiteMensal=@cli_limiteMensal" +
                        " WHERE cli_codigo = @codigo";
                    cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = codigo;
                    cmd.Parameters.Add(new SqlParameter("@nome", SqlDbType.VarChar)).Value = nome;
                    cmd.Parameters.Add(new SqlParameter("@idade", SqlDbType.Int)).Value = idade;
                    cmd.Parameters.Add(new SqlParameter("@nascimento", SqlDbType.Date)).Value = nascimento;
                    cmd.Parameters.Add(new SqlParameter("@rg", SqlDbType.VarChar)).Value = rg;
                    cmd.Parameters.Add(new SqlParameter("@cpf", SqlDbType.VarChar)).Value = cpf;
                    cmd.Parameters.Add(new SqlParameter("@logradouro", SqlDbType.VarChar)).Value = logradouro;
                    cmd.Parameters.Add(new SqlParameter("@numero", SqlDbType.VarChar)).Value = numero;
                    cmd.Parameters.Add(new SqlParameter("@complemento", SqlDbType.VarChar)).Value = complemento;
                    cmd.Parameters.Add(new SqlParameter("@bairro", SqlDbType.VarChar)).Value = bairro;
                    cmd.Parameters.Add(new SqlParameter("@cidade", SqlDbType.Int)).Value = cidade;
                    cmd.Parameters.Add(new SqlParameter("@tipo_pessoa", SqlDbType.VarChar)).Value = tipo_pessoa;
                    cmd.Parameters.Add(new SqlParameter("@cli_telefone", SqlDbType.VarChar)).Value = cli_telefone;
                    cmd.Parameters.Add(new SqlParameter("@cli_celular", SqlDbType.VarChar)).Value = cli_celular;
                    cmd.Parameters.Add(new SqlParameter("@cli_calJuros", SqlDbType.VarChar)).Value = cli_calJuros;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteCredito", SqlDbType.Float)).Value = cli_limiteCredito;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteMensal", SqlDbType.Float)).Value = cli_limiteMensal;
                }
                else if (tipo_pessoa == "Pessoa Jurídica")
                {
                    cmd.CommandText = "UPDATE Cliente" +
                        " SET cli_razao_social = @razao, cli_data_fundacao = @fundacao," +
                        " cli_ie = @ie, cli_cnpj = @cnpj, cli_logradouro = @logradouro, cli_numero = @numero," +
                        " cli_complemento = @complemento, cli_bairro = @bairro, cid_codigo = @cidade,"+
                        " cli_tipo_pessoa = @tipo_pessoa, cli_telefone=@cli_telefone, cli_celular = @cli_celular,"+
                        " cli_calJuros=@cli_calJuros, cli_limiteCredito=@cli_limiteCredito,cli_limiteMensal=@cli_limiteMensal" +
                        " WHERE cli_codigo = @codigo";
                    cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = codigo;
                    cmd.Parameters.Add(new SqlParameter("@razao", SqlDbType.VarChar)).Value = razao;
                    cmd.Parameters.Add(new SqlParameter("@fundacao", SqlDbType.Date)).Value = fundacao;
                    cmd.Parameters.Add(new SqlParameter("@ie", SqlDbType.VarChar)).Value = ie;
                    cmd.Parameters.Add(new SqlParameter("@cnpj", SqlDbType.VarChar)).Value = cnpj;
                    cmd.Parameters.Add(new SqlParameter("@logradouro", SqlDbType.VarChar)).Value = logradouro;
                    cmd.Parameters.Add(new SqlParameter("@numero", SqlDbType.VarChar)).Value = numero;
                    cmd.Parameters.Add(new SqlParameter("@complemento", SqlDbType.VarChar)).Value = complemento;
                    cmd.Parameters.Add(new SqlParameter("@bairro", SqlDbType.VarChar)).Value = bairro;
                    cmd.Parameters.Add(new SqlParameter("@cidade", SqlDbType.Int)).Value = cidade;
                    cmd.Parameters.Add(new SqlParameter("@tipo_pessoa", SqlDbType.VarChar)).Value = tipo_pessoa;
                    cmd.Parameters.Add(new SqlParameter("@cli_telefone", SqlDbType.VarChar)).Value = cli_telefone;
                    cmd.Parameters.Add(new SqlParameter("@cli_celular", SqlDbType.VarChar)).Value = cli_celular;
                    cmd.Parameters.Add(new SqlParameter("@cli_calJuros", SqlDbType.VarChar)).Value = cli_calJuros;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteCredito", SqlDbType.Float)).Value = cli_limiteCredito;
                    cmd.Parameters.Add(new SqlParameter("@cli_limiteMensal", SqlDbType.Float)).Value = cli_limiteMensal;
                } 
                objD.executacomando(cmd);
            }
            catch (Exception ex)
            {

                throw ex;
            }
            cmd = null;
            objD = null;
        }

        public void excluir(int cli_codigo)
        {
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                cmd.CommandText = "DELETE FROM Cliente" +
                    " WHERE" +
                    " cli_codigo=@cli_codigo";
                cmd.Parameters.Add(new SqlParameter("@cli_codigo", SqlDbType.Int)).Value = cli_codigo;
                objD.executacomando(cmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            cmd = null;
            objD = null;
        }

        //selecionar várias linhas
        public DataTable localizar(String descricao, String coluna)
        {
            DataTable tab = null;
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                cmd.CommandText = "SELECT * FROM Cliente" +
                    " WHERE " + coluna + " like @descricao";
                cmd.Parameters.Add(new SqlParameter("@descricao",
                    SqlDbType.VarChar)).Value = descricao + "%";
                tab = objD.executaconsulta(cmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            cmd = null;
            objD = null;
            return tab;
        }

        public DataTable localizarLeave(String descricao, String coluna)
        {
            DataTable tab = null;
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                cmd.CommandText = "SELECT * FROM Cliente" +
                    " WHERE " + coluna + " like @descricao";
                cmd.Parameters.Add(new SqlParameter("@descricao",
                    SqlDbType.VarChar)).Value = descricao;
                tab = objD.executaconsulta(cmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            cmd = null;
            objD = null;
            return tab;
        }

        //selecionar uma linha - um código
        public int localizar(int codigo)
        {
            DataTable tab = null;
            SqlCommand cmd = null;

            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                cmd.CommandText = "SELECT * FROM Cliente" +
                    " WHERE cli_codigo = @codigo";
                cmd.Parameters.Add(new SqlParameter("@codigo",
                    SqlDbType.Int)).Value = codigo;
                tab = objD.executaconsulta(cmd);
                cmd = null;
                objD = null;
                if (tab.Rows.Count > 0)
                    return int.Parse(tab.Rows[0][0].ToString());
                else
                    return 0;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable localizarEmTudo(String descricao, String tipoPessoa)
        {
            DataTable tab = null;
            SqlCommand cmd = null;
            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                cmd.CommandText = "LocalizaCliente"; //Procedure
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@descricao",SqlDbType.VarChar)).Value = "%" + descricao + "%";
                cmd.Parameters.Add(new SqlParameter("@tipo",SqlDbType.VarChar)).Value = tipoPessoa;                    
                tab = objD.executaconsulta(cmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            cmd = null;
            objD = null;
            return tab;
        }

        public DataTable localizarPrimeiroUltimo(String descricao)
        {
            DataTable tab = null;
            SqlCommand cmd = null;

            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                if (descricao == "ultimo")
                {
                    cmd.CommandText = "SELECT cli_codigo = max(cli_codigo) FROM Cliente";
                    cmd.Parameters.Add(new SqlParameter("@descricao",
                         SqlDbType.VarChar)).Value = descricao;
                }
                else if (descricao == "primeiro")
                {
                    cmd.CommandText = "SELECT cli_codigo = min(cli_codigo) FROM Cliente";
                    cmd.Parameters.Add(new SqlParameter("@descricao",
                     SqlDbType.VarChar)).Value = descricao;
                }
                tab = objD.executaconsulta(cmd);

            }
            catch (Exception)
            {

                throw;
            }
            return tab;
        }

        public DataTable localizarProxAnterior(String descricao, int codigo)
        {
            DataTable tab = null;
            SqlCommand cmd = null;

            try
            {
                objD = new Dados();
                cmd = new SqlCommand();
                if (descricao == "proximo")
                    cmd.CommandText = "SELECT cli_codigo FROM Cliente WHERE cli_codigo = (SELECT MIN(cli_codigo) FROM Cliente WHERE cli_codigo > @codigo)";

                else if (descricao == "anterior")
                    cmd.CommandText = "SELECT cli_codigo FROM Cliente WHERE cli_codigo = (SELECT MAX(cli_codigo) FROM Cliente WHERE cli_codigo < @codigo)"; ;

                cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = codigo;

                tab = objD.executaconsulta(cmd);
            }
            catch (Exception)
            {

                throw;
            }
            return tab;
        }
    }
}
